package com.com.Demo;

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSocketDemo1 {

    public static void main(String[] args) {
//表示在当前电脑的8088端口号上监听客户有连接请求
        try {
            ServerSocket serverSocket = new ServerSocket(8088);
            System.out.println("服务端已启动");

            while (true) {
                System.out.println("等待客户端的连接。。");

                //在服务端编程模型中，accept方法是每收到一个客户端连接，就立刻再调用一次accept方法用于接收第二个客户端的连接，依此类推
                //但在当前accept方法执行线程中 如果调用socket对象的getInputStream的read方法，read也会阻塞，会造成accept方法无法立刻调用
                    //read方法为什么会阻塞:是因为不确定客户端通过 网络 什么时候发数据过来，或数据什么到达...
                  //如果要解决 accept方法立刻调用，不受read方法阻塞的影响，将read方法放到线程中执行。。

                Socket socket = serverSocket.accept();//此方法在未收到客户端连接时，会一直处于等待(阻塞)状态
                //当有客户端连接上来后，该方法返回一个socket表示与客户成功建立连接的对象


                InetAddress inetAddress = socket.getInetAddress();
                System.out.println("客户端的主机名:" + inetAddress.getHostName() + "IP：" + inetAddress.getHostAddress()+"客户端的端口号为:"+socket.getPort());

               // new ServerSocketThread(socket).start();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
